﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet.Media
{
	/// <summary>
	/// 實作 IMetadata 介面的中繼資料基底類別。
	/// </summary>
	public abstract class MetadataBase : IMetadata
	{
		#region 欄位
		bool _IsReadOnly;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 MetadataBase 執行個體。
		/// </summary>
		protected MetadataBase()
		{ }
		/// <summary>
		/// 初始化新的 MetadataBase 執行個體。
		/// </summary>
		/// <param name="template">範本中繼資料。</param>
		/// <param name="isReadOnly">是否為唯讀。</param>
		protected MetadataBase(IMetadata template, bool isReadOnly)
		{
			//從範本初始化
			if (template != null)
				this.CopyFrom(template);

			//初始化欄位
			_IsReadOnly = isReadOnly;
		}
		#endregion
		#region Authors
		/// <summary>
		/// 取得或設定媒體的作者。
		/// </summary>
		public virtual string[] Authors
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region City
		/// <summary>
		/// 取得或設定媒體內容所在的城市。
		/// </summary>
		public virtual string City
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Comment
		/// <summary>
		/// 取得或設定媒體的註解文字。
		/// </summary>
		public virtual string Comment
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Copyright
		/// <summary>
		/// 取得或設定媒體的版權資訊。
		/// </summary>
		public virtual string Copyright
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region CountryRegion
		/// <summary>
		/// 取得或設定媒體內容所在的國家或地區。
		/// </summary>
		public virtual string CountryRegion
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region CreationTime
		/// <summary>
		/// 取得或設定媒體建立時間。
		/// </summary>
		public virtual DateTime? CreationTime
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Clone
		/// <summary>
		/// 建立可修改的中繼資料複本。
		/// </summary>
		/// <returns>中繼資料複本。</returns>
		public abstract object Clone();
		#endregion
		#region CopyFrom
		/// <summary>
		/// 從指定的中繼資料複製屬性。
		/// </summary>
		/// <param name="metadata">指定的中繼資料。</param>
		public virtual void CopyFrom(IMetadata metadata)
		{ }
		#endregion
		#region GetAsReadOnly
		/// <summary>
		/// 取得唯讀的中繼資料。
		/// </summary>
		/// <returns>唯讀的中繼資料。</returns>
		public abstract IMetadata GetAsReadOnly();
		#endregion
		#region IsReadOnly
		/// <summary>
		/// 取得中繼資料是否為唯讀。
		/// </summary>
		public bool IsReadOnly
		{
			get
			{
				return _IsReadOnly;
			}
		}
		#endregion
		#region Keywords
		/// <summary>
		/// 取得或設定媒體的關鍵字。
		/// </summary>
		public virtual string[] Keywords
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region LastWriteTime
		/// <summary>
		/// 取得或設定媒體最近更新時間。
		/// </summary>
		public virtual DateTime? LastWriteTime
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Rating
		/// <summary>
		/// 取得或設定媒體的評價。
		/// </summary>
		public virtual int? Rating
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region RatingPercentage
		/// <summary>
		/// 取得或設定媒體的評價百分比。
		/// </summary>
		public virtual int? RatingPercentage
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Software
		/// <summary>
		/// 取得或設定製作媒體的軟體名稱。
		/// </summary>
		public virtual string Software
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region StateProvince
		/// <summary>
		/// 取得或設定媒體內容所在的省或州。
		/// </summary>
		public virtual string StateProvince
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Subject
		/// <summary>
		/// 取得或設定媒體的主旨。
		/// </summary>
		public virtual string Subject
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
		#region Title
		/// <summary>
		/// 取得或設定媒體的標題。
		/// </summary>
		public virtual string Title
		{
			get
			{
				return null;
			}
			set
			{ }
		}
		#endregion
	}
}
